Lambda 関数の Inactive 状態を回避するにはどうすればよいですか?

Lambda 関数の Inactive 状態を回避するにはどうすればよいですか?

Clock Icon2022.04.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Here is the English version

困っていた内容

Lambda 関数をコンテナとしてデプロイしたのですが、数週間利用しないと Inactive 状態になり、Inactive 状態だと呼び出しに失敗します。 Inactive 状態を回避するにはどうすればよいですか?

どう対応すればいいの?

Lambda 関数をコンテナとしてデプロイした場合、数週間利用しないと Inactive 状態になることが、以下の AWS 公式ドキュメントに記載されています。

AWS 公式ドキュメントより

数週間にわたって関数が呼び出されない場合、Lambda は最適化されたバージョンを再利用し、関数は Inactive 状態に移行します。関数を再度アクティブにするには、関数を呼び出す必要があります。Lambda は最初の呼び出しを拒否し、関数は Lambda がイメージを再最適化するまで Pending 状態に入ります。その後、関数は Active 状態に戻ります。

Lambda 関数が Inactive な状態で呼び出すと、呼び出しに失敗します。

AWS 公式ドキュメントより

Inactive — Lambda 用に設定された外部リソースを再利用するのに十分な時間アイドル状態を維持した関数は非アクティブになります。非アクティブな関数を呼び出そうとすると、呼び出しは失敗し、関数リソースが再作成されるまで、Lambda は関数を保留状態に設定します。Lambda がリソースの再作成に失敗した場合、関数は非アクティブ状態に設定されます。

Lambda 関数の Inactive 状態への移行を避けるには、2 つの方法があります。

1. プロビジョニング済み同時実行を設定する

プロビジョニング済み同時実行の設定をすることで、Lambda 関数が Inactive 状態となることを避けることが可能です。 なお、プロビジョニング済み同時実行を設定した場合、Lambda 関数を呼び出していなくても料金が発生する点にはご注意ください。

AWS 公式ドキュメントより

プロビジョニングされた同時実行 — これは、関数に割り当てる、事前に初期化された実行環境の数です。これらの実行環境は、受信した関数リクエストに即座に対応できます。プロビジョニングされた同時実行数は、関数のコールドスタートレイテンシーを削減するのに役立ちます。プロビジョニングされた同時実行を設定すると、AWS アカウント に追加料金が請求されます。

2. 定期的に Lambda 関数を呼び出す

1 週間に 1 回程度の頻度で該当の Lambda 関数を呼び出すことでも実現可能です。 定期的な呼び出しには Amazon EventBridge などを利用し、Lambda 関数を定期的に呼び出してください。

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.